package com.topgay.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.topgay.dao.ComBoardDAO;
import com.topgay.domain.ComBoard;
import com.topgay.util.BoardUtilities;
import com.topgay.util.PagingBean;

@Service
public class ComBoardServicelmpl implements ComBoardService{

	@Autowired
	private ComBoardDAO comBoardDAO;

	                                                                                                                                                                                     
	//글입력 처리를 하는 메소드
	@Override
	public void writeContent(ComBoard comBoard) {
	    //1.입력일시와 사용자가 입력한 글의 내용을 DB용으로변환한 것을 매개변수로 받은 comboard에 설정한다
		String c = BoardUtilities.changeContentForDB(comBoard.getContent());
		comBoard.setContent(c);
		//2.DAO를 이용해 글을 db에 등록한다.
		comBoardDAO.insertContentForNewCount(comBoard);
		
		
		
	}
     //하나의 게시물을 조회하는 메소드
	@Override
	public ComBoard getContentByNO(int no) {
	
		//1. DAO의 메소드를 이용해 조회수를 1 증가 시킨다.
		comBoardDAO.updateViewCount(no);
		//2. DAO의 메소드를 이용해 글 정보 조회
		
		ComBoard board = comBoardDAO.selectContentByNO(no);
		
		return board;
	}

	 //답변 폼이나 수정폼을 위해 하나의 게시물을 조회하는 메소드
	//getContentByNO() 와 비교해 조회수 증가를 시키지 않는다.
	@Override
	public ComBoard getContentByNoForForm(int no) {
	
		//1. no값으로 글조회
		ComBoard comBoard = comBoardDAO.selectContentByNO(no);
		//2. content를 textarea용으로 변경
		comBoard.setContent(BoardUtilities.changeContentForTextArea(comBoard.getContent()));
	   return comBoard;
	}

	@Override
	//게시물을 수정 처리하는 메소드
	public void modifyContent(ComBoard comBoard) {
//	1. 입력일시와 사용자가 입력한 글의 내용을 DB용으로 변환한 것을 매개변수로 받은 board에 설정한다.
		comBoard.setContent(BoardUtilities.changeContentForDB(comBoard.getContent()));
//		2. DAO 메소드를 이용해 수정 처리
		comBoardDAO.updateContent(comBoard);
	}
	
	
	//mypage 게시물을 수정 처리하는 메소드
	public void modifyContent2(ComBoard comBoard) {
//	1. 입력일시와 사용자가 입력한 글의 내용을 DB용으로 변환한 것을 매개변수로 받은 board에 설정한다.
		comBoard.setContent(BoardUtilities.changeContentForDB(comBoard.getContent()));
//		2. DAO 메소드를 이용해 수정 처리
		comBoardDAO.updateContent2(comBoard);
	}

	
	//한개의 게시물을 삭제 처리하는 메소드
	@Override
	public void deleteContentByNO(int no) {
		comBoardDAO.deleteContentByNO(no);
		
	}
 
	//답변 해주는 메소드
	@Override
	public void replyContent(ComBoard comBoard) {
	//1. DAO의 메소드를 이용해 DB에 같은 refamily의 게시물들 중 답변하고자하는 글의 restep 보다 큰 게시물들의 restep들을 1씩 증가시킨다.
		comBoardDAO.updateRestep(comBoard.getRefamily(), comBoard.getRestep());
    //		2. 등록하려는 게시물 데이터(매개변수로 받은 board)의 restep, relevel을 1 증가시킨다. 
   //       - board가 가지고 있는 것은 원본글의 값이므로 자신의 값으로 변경하는 것.
		comBoard.setRestep(comBoard.getRestep()+1);
		comBoard.setRelevel(comBoard.getRelevel()+1);
		
   //     3. 사용자가 입력한 글의 내용을 DB용으로 변환한 것을 매개변수로 받은 board에 설정한다.
		comBoard.setContent(BoardUtilities.changeContentForDB(comBoard.getContent()));
   //	  4. DAO의 메소드를 이용해 글을 DB에 넣는다.
		comBoardDAO.insertContentForReply(comBoard);
	}

   //	페이징 처리 목록 조회 메소드.
   //	조회한 게시물들(ArrayList)와 페이징 처리를 위한 PagingBean의 객체를 생성해 Map에
   //   넣어 return 처리한다.
	@Override
	public Map getComBoardList(int page) {
	 HashMap map = new HashMap();
	//1. DAO메소드를 이용해 매개변수로 받은 페이지에 보여줄 게시물들을 ArrayList로 조회
	 List<ComBoard>list = comBoardDAO.selectComBoardList(page);
	 map.put("list", list);
	 //2. PagingBean객체를 생성 ( 필요 정보 : 전체 게시물의 개수, 보고자 하는 페이지 번호)
     //2-1 : DAO의 메소드를 이용해 전체 게시물 수 조회
	 int totalContent = comBoardDAO.selectTotalContent();
	 //2-2 : PagingBean 객체 생성
	 PagingBean pagingBean = new PagingBean(totalContent, page);
	 map.put("pagingBean", pagingBean);
	 return map;
	}
	
	
	//내글조회 처리 
	
	@Override
	public Map getComMyList(int page,String id) {
	 HashMap map = new HashMap();
	   //1. DAO메소드를 이용해 매개변수로 받은 페이지에 보여줄 게시물들을 ArrayList로 조회
		 List<ComBoard>list = comBoardDAO.selectComMyList(page, id);
         
		map.put("list", list);
		 
		 //2. PagingBean객체를 생성 ( 필요 정보 : 전체 게시물의 개수, 보고자	 하는 페이지 번호)
		    //2-1 : DAO의 메소드를 이용해 전체 게시물 수 조회
		 int totalContent = comBoardDAO.selectTotalContentById(id);
		 
		 //2-2 : PagingBean 객체 생성
		 PagingBean pagingBean = new PagingBean(totalContent, page);
		 map.put("pagingBean", pagingBean);
		 return map;
		
	}
	
	
	   }






